

const NHttp = require('http');
const NUrl = require('url');
const NQuerystring = require('querystring');

// 引入路由模块
const getAdminRouters = require('./route/admin.route.js');


// 配置信息
const host = {
    ip: '127.0.0.1',
    port: 9527
}

let routers = getAdminRouters();

// 创建服务实例
const server = NHttp.createServer((req, res) => {
  // 处理输入请求参数
  // 解析地址。req.url=/，是相对路径，所以要加 baseUrl 参数
  let urlObj = new NUrl.URL(req.url, 'http://' + host.ip);
  let urlPathName = urlObj.pathname; // 路由路径（?前面的相对路径）
  // 获取 URL 参数对象
  let urlParams = urlObj.searchParams;
  // 获取表单提交的内容
  let reqBody = '';
  req.on('data', function (data) {
    reqBody += data;
  })
  // 用于数据接收完成后再获取
  req.on('end', async function () {
    let formParams = NQuerystring.parse(reqBody);
    // 获取请求类型(GET,POST,DELETE...)
    let reqMethod = req.method;

    // 返回内容
    let content = {
      status: 0,
      msg: '路由错误 ',
      data: {
        method: reqMethod,
        path: urlPathName
      },
      code: 404
    };

    // 处理图片
    if (urlPathName.indexOf('/api/image/') == 0) {
      content = await routers.callback(reqMethod, '/api/image/', {
        imagename: urlPathName.split('/api/image/')[1]
      });
      res.statusCode = 200;
      res.setHeader('Content-Type', 'image/png');
      res.end(content);
      return;
    }
    // 简易路由处理
    if (routers.hasRoute(reqMethod, urlPathName)) {
      content = await routers.callback(reqMethod, urlPathName, urlParams, formParams);
    }
    // 处理输出
    if (content.status == 0 && content.code == 404) {
      res.writeHead(404);
      res.end(JSON.stringify(content));
      return;
    }
    res.statusCode = 200;
    // 自动判断返回值的类型，调用对应的返回处理方式
    switch (typeof (content)) {
      case 'object':
        content = JSON.stringify(content);
        res.setHeader('Content-Type', 'application/json');
        res.setHeader('Content-Length', Buffer.byteLength(content))
        res.end(content)
        break;
      default:
        if (content.indexOf('<') > -1 && content.indexOf('>') > -1) {
          res.setHeader('Content-Type', 'text/html;charset=utf-8');
        } else {
          res.setHeader('Content-Type', 'text/plain');
        }
        res.setHeader('Content-Length', Buffer.byteLength(content))
        res.end(content);
        break;
    }
  })
})

// 开始监听
server.listen(host.port, host.ip, () => {
    console.log(`服务器运行在 http://${host.ip}:${host.port}`);
})




